#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import "AddressAnnotation.h"

/**
 * A PinNoteManagerDelegate is a protocol for a delegate that
 * handles the management of user-defined pin notes.
 *
 * @author      James Lin
 * @version     1.3.7
 * @since       1.0.3
 */
@protocol PinNoteManagerDelegate

/**
 * Get the view controller on which to overlay the pin note tools.
 *
 * @return  the view controller on which to overlay toolbars
 */
- (UIViewController*)getViewController;

/**
 * Add a temporary pin note to the map.
 *
 * @param coord        the coordinates of the pin
 * @param title        the title of the annotation of the pin
 * @param description  the description of the pin
 */
- (void)addPinNoteWithCoord:(CGPoint)coord 
					  title:(NSString*)title 
				description:(NSString*)description;

/**
 * Remove all temporary pin notes on the map.
 */
- (void)removePinNotes;

/**
 * Save all temporary pin notes on the map.
 */
- (void)savePinNotes;

/**
 * Show all persistent pin notes on the map.
 */
- (void)showAllPinNotes;

/**
 * Save the given updated persistent pin note.
 *
 * @param pinNote  the updated pin note
 */
- (void)savePinNote:(AddressAnnotation*)pinNote;

/**
 * Delete the given persistent pin note.
 *
 * @param pinNote  the pin note to delete
 */
- (void)deletePinNote:(AddressAnnotation*)pinNote;

/**
 * Relocate the given persistent pin note.
 *
 * @param pinNote  the pin note to relocate
 * @param coord    the new location for the pin note
 */
- (void)relocatePinNote:(AddressAnnotation*)pinNote 
			  withCoord:(CGPoint)coord;

/**
 * Toggle visibility of the given persistent pin note.
 *
 * @param pinNote  the pin note to show or hide
 */
- (void)toggleVisibilityOfPinNote:(AddressAnnotation*)pinNote;

/**
 * Handle a pin note tools deactivated event.
 */
- (void)pinNoteToolsDeactivated;

/**
 * Refresh currently active pin notes.
 */
- (void)refreshPinNotes;

@end
